package com.sam.example3.server;

import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;



public class Demo1Server {
	private static Logger logger = Logger.getLogger(Demo1Server.class);

	private static int PORT = 3005;
	
	private final static String FILTER_NAME_CODEC = "codec";

	
	public static void main(String[] args) {
		IoAcceptor acceptor = null;   
		try{
			// 创建连接
			acceptor = new NioSocketAcceptor();
			/**
			 *  添加一个codec的过滤器(消息编码解码过滤器)
			 *  根据文本换行符编解码的TextLineCodec过滤器
			 *  ------ 指定参数为根据windows的换行符编解码，遇到客户端发送来的消息，
			 *  看到windows换行符（\r\n）就认为是一个完整消息的结束符了；
			 *  而发送给客户端的消息，都会在消息末尾添加上(\r\n)文本换行符；
			 */
			acceptor.getFilterChain().addLast(FILTER_NAME_CODEC, 
						new ProtocolCodecFilter(new TextLineCodecFactory(
								Charset.forName("UTF-8"),
								LineDelimiter.WINDOWS.getValue(),
								LineDelimiter.WINDOWS.getValue()
						)));
			// 设置读取数据的缓冲区大小
			acceptor.getSessionConfig().setReadBufferSize(2048);
			/**
			 *  绑定逻辑处理器
			 *  添加业务处理
			 */
			acceptor.setHandler(new Demo1ServerHandler()); 
			// 绑定端口
			acceptor.bind(new InetSocketAddress(PORT));
			logger.info("服务端启动成功...     端口号为：" + PORT);

		} catch (Exception e){
			logger.error("服务端启动异常....", e);
			e.printStackTrace();
		}
	}
}
